﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE.Gen;
using Insifo.DL.Gen;
using Insifo.DL;

namespace Insifo.BL.Gen
{
    public class BLImportacion
    {
        //Objeto transaccion
        DLTransactionMng _transaccion = null;

        //Instancias
        DLImportacion _dl = new DLImportacion();
        DLImportacionSinonimo _dlImportacionSinonimo = new DLImportacionSinonimo();

        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEImportacion pbe)
        {
            return _dl.Listar(pbe);
        }

        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarSel(BEImportacion pbe)
        {
            return _dl.ListarSel(pbe);
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Insertar(BEImportacion pbe)
        {
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                int intUltimoRegistro = 0;

                //Se obtiene el ultimo registro
                if (pbe.Importaciones.Count > 0)
                {
                    DataView dvRegistros = _dl.ListarSel(pbe).Tables[0].DefaultView;
                    if (dvRegistros.Count > 0)
                    {
                        dvRegistros = dvRegistros.ToTable(true, "IdRegistro").DefaultView;
                        dvRegistros.Sort = "IdRegistro DESC";
                        intUltimoRegistro = (int)dvRegistros[0]["IdRegistro"];
                    }
                }

                foreach (BEImportacion beImportacion in pbe.Importaciones)
                {
                    beImportacion.IdRegistro += intUltimoRegistro;
                    _dl.Insertar(beImportacion);
                }
                //Culmina la transaccion
                _dl.Mapear();
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return pbe;
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Actualizar(BEImportacion pbe)
        {
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                foreach (BEImportacion beImportacion in pbe.Importaciones)
                    _dl.Insertar(beImportacion);
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return pbe;
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Obtener(BEImportacion pbe)
        {
            //Obtiene el detalle de salida
            return _dl.Obtener(pbe);

        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Importar(BEImportacion pbe)
        {
            return _dl.Importar(pbe);
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Importar_Registro(BEImportacion pbe)
        {
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                foreach (BEImportacion beImportacion in pbe.Importaciones)
                    _dl.Importar(beImportacion);
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return pbe;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion Eliminar(BEImportacion pbe)
        {
            return _dl.Eliminar(pbe);
        }

        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarTabla(BEImportacion pbe)
        {
            return _dl.ListarTabla(pbe);
        }

        /// <summary>
        /// Método obtiene la lista
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarCampo(BEImportacion pbe)
        {
            return _dl.ListarCampo(pbe);
        }

        /// <summary>
        /// Método obtiene obtiene la Lista de las importaciones
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarMaestro(BEImportacion pbe)
        {
            return _dl.ListarMaestro(pbe);
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEImportacion InsertarTabla(BEImportacion pbe)
        {
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dl.Transaction = _transaccion;
                _dlImportacionSinonimo.Transaction = _transaccion;
                foreach (BEImportacion beImportacion in pbe.Importaciones)
                    _dl.InsertarTabla(beImportacion);
                foreach (BEImportacionSinonimo beImportacionSinonimo in pbe.Sinonimos)
                    _dlImportacionSinonimo.Insertar(beImportacionSinonimo);
                _dl.Mapear_Campo(pbe);
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return pbe;
        }

    }
}
